home *** CD-ROM | disk | FTP | other *** search
- {
- LIST.EXE Version 1.0
- 14 de Febrero de 1996
- (Dia de San Valentin, es que estoy enamorado de DELPHI)
- (c) 1996 Alberto Garcia Alvarez
- email:agarcia@etsiig.uniovi.es
- tlfno: 985 518 20 32
- fax : 985 518 21 25
- Universidad de Oviedo.
- Escuela Tecnica Superior de Ingenieros Industriales e Informaticos.
- Centro de Inteligencia Artificial
- GIJON - PRINCIPADO DE ASTURIAS - ESPA╤A
-
- Esto hace listado en formato rtf de los ficheros fuentes en pascal
- que le paseis. Esta escrito en DELPHI y con todos los controles estandar
- sin cosas espectaculares, pero funciona creo que bien, la principal ventaja
- es que para cada tipo de token (reservada,codigo,literal) crea y utiliza
- un tipo de estilo diferente, luego usando word, por ejemplo, podeies cargar
- el fichero rtf y modificarlo, (modificando los estilos) a vuestro libre
- albedrio (o gusto).
-
- En una version posterior, si tengo tiempo, hare que liste tambien los
- ficheros DFM, por ahora no tengo ni tiempo ni ganas.
-
- Este software es GRATIS, FREEWARE, y no se puede vender, ni utilizar
- en ningun entorno comercial SIN HACER REFERENCIA EXPRESA AL AUTOR,
- y SIN PERMISO ESCRITO DEL AUTOR.
-
- En general considerense las premisas de GNU que me parecen buenas.
-
- No es la quinta maravilla, pero funciona bien(┐?), es gratis, y ademas
- solo tienes que compilarlo, seguro que es MUY mejorable pero no tengo
- mas tiempo.
-
- Esto esta escrito en CASTELLANO porque esta hecho en ESPA╤A para el
- resto del mundo, y si quieren usarlo pues que aprendan CASTELLANO que
- yo tambien me tuve que jo... y aprender INGLES.
-
- Si realizais alguna mejora me gustaria saberlo, si lo utilizais, tambien
- me gustaria, no garantizo responder a los mail, pero si encontrais errores
- y me lo decis puedo corregirlo. Si lo encontrais util, como ya se que
- dinero no mandareis, pues me podeis mandar una foto de vuestra ciudad, posta
- o algo asi.
-
- Alberto Garcia Alvarez
- C/ Alonso de Quintanilla n║ 21 3║C
- 33271 Gijon Asturias Espa±a
-
- }
-
- unit Ulist;
-
- { Unidad para pasar ficheros de texto, en pascal fuente, a un fichero
- en formato rtf, sirve para a±adir a la documentacion del programa
- RECUERDA : La documentacion es el patrimonio de la empresa.
- }
-
- interface
-
- uses
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, DB, StdCtrls, DBTables, Buttons;
-
- type
- TFPrincipal = class(TForm)
- OpenDialog1: TOpenDialog;
- Label1: TLabel;
- Edit1: TEdit;
- Label2: TLabel;
- Edit2: TEdit;
- SpeedButton1: TSpeedButton;
- SpeedButton2: TSpeedButton;
- SaveDialog1: TSaveDialog;
- SpeedButton3: TSpeedButton;
- Label3: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure Carga_Reservadas;
- procedure Parser(const nfe,nfs : string);
- procedure SpeedButton1Click(Sender: TObject);
- procedure SpeedButton2Click(Sender: TObject);
- procedure SpeedButton3Click(Sender: TObject);
- private
- PR : TStringList;
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- FPrincipal: TFPrincipal;
-
- implementation
-
- {$R *.DFM}
-
- procedure TFPrincipal.Carga_Reservadas;
- { Tabla de palabras reservadas }
- Begin
- with pr do
- Begin
- add('initialization');
- add('and'); add('as'); add('asm');
- add('array'); add('begin'); add('case');
- add('class'); add('const'); add('constructor');
- add('destructor'); add('div'); add('do');
- add('downto'); add('else'); add('end');
- add('except'); add('exports'); add('file');
- add('finally'); add('for'); add('function');
- add('goto'); add('if'); add('implementation');
- add('in'); add('inherited'); add('inline');
- add('interface'); add('is'); add('label');
- add('library'); add('mod'); add('nil');
- add('not'); add('object'); add('of');
- add('or'); add('packed'); add('procedure');
- add('program'); add('property'); add('raise');
- add('record'); add('repeat'); add('set');
- add('shl'); add('shr'); add('string');
- add('then'); add('to'); add('try');
- add('type'); add('unit'); add('until');
- add('uses'); add('var'); add('while');
- add('with'); add('xor'); add('absolute');
- add('abstract'); add('assembler'); add('at');
- add('cdecl'); add('default'); add('dynamic');
- add('export'); add('external'); add('far');
- add('forward'); add('index'); add('message');
- add('name'); add('near'); add('nodefault');
- add('on'); add('override'); add('private');
- add('protected'); add('public'); add('published');
- add('read'); add('resident'); add('stored');
- add('virtual'); add('write'); add('self');
- add('true'); add('false'); add('writeln');
- End;
- End;
-
- procedure TFPrincipal.FormCreate(Sender: TObject);
- begin
- Pr:=TStringList.Create;
- Pr.Sorted:=True;
- Carga_Reservadas;
- end;
-
- procedure TFPrincipal.FormDestroy(Sender: TObject);
- begin
- pr.free;
- end;
-
- procedure TFPrincipal.Parser(const nfe,nfs : string);
-
- Var
- Ax,
- Pa : string; { String Auxiliares }
- Fe : File of byte;
- Fs : TextFile;
- Aux,
- Estado : Integer; { Simula un estado de un AFD }
- Ch : Byte;
-
- procedure whex(b : byte);
- { Escribe los codigos "extra±os" en formato rtf hexadecimal para
- no complicarnos la vida con las conversiones }
- Begin
- case char(b) of
- ' ',
- 'a'..'z',
- '0'..'9',
- 'A'..'Z': write(fs,char(b)); { Por claridad los alfanumericos tal cual }
- else write(fs,'\''',format('%02x',[b]));
- end;
- End;
-
- procedure escribe_string(s:string);
- { Para enviar un string entero al fichero }
- Var i : integer;
- Begin
- for i:=1 to length(s) do whex(ord(s[i]));
- End;
-
- procedure prologo(const nfe : string);
- { Prologo del fichero rtf, esta extraido del word creo. }
- begin
- write (fs,'{\rtf1\ansi \deff4\deflang1033{\fonttbl{\f4\froman\');
- write (fs,'fcharset0\fprq2 Times New Roman;}}{\colortbl;\red0\');
- write (fs,'green0\blue0;\red0\green0\blue255;\red0\green255\bl');
- write (fs,'ue255;\red0\green255\blue0;\red255\green0\blue255;\');
- writeln(fs,'red255\green0\blue0;');
- write (fs,'\red255\green255\blue0;\red255\green255\blue255;\re');
- write (fs,'d0\green0\blue128;\red0\green128\blue128;\red0\gree');
- write (fs,'n128\blue0;\red128\green0\blue128;\red128\green0\bl');
- write (fs,'ue0;\red128\green128\blue0;\red128\green128\blue128');
- writeln(fs,';\red192\green192\blue192;}{\stylesheet{\widctlpar');
- write (fs,'\f4\fs20\lang1034 \snext0 Normal;}{\*\cs10 \additiv');
- write (fs,'e Default Paragraph Font;}{\s15\widctlpar\tqc\tx425');
- write (fs,'2\tqr\tx8504 \f4\fs20\lang1034 \sbasedon0\snext15 h');
- write (fs,'eader;}{\s16\widctlpar\tqc\tx4252\tqr\tx8504 \f4\fs');
- writeln(fs,'20\lang1034 \sbasedon0\snext16 footer;}{\*\cs17');
- write (fs,'\additive\sbasedon10 page number;}{\*\cs18 \additiv');
- write (fs,'e\f4\fs24 \sbasedon10 Codigo;}{\*\cs19 \additive\f4');
- write (fs,'\fs24 \sbasedon10 Literal;}{\*\cs20 \additive\f4\fs');
- write (fs,'24 \sbasedon10 Comentario;}{\*\cs21 \additive\caps\');
- writeln(fs,'f4\fs24\ul\nosupersub \sbasedon10 Reservada;}}');
- write (fs,'{\info{\author Alberto Garcia Alvarez}{\operator Al');
- write (fs,'berto Garcia Alvarez}{\creatim\yr1996\mo2\dy9\hr14\');
- write (fs,'min11}{\revtim\yr1996\mo2\dy12\hr12\min42}{\version');
- write (fs,'2}{\edmins1}{\nofpages2}{\nofwords7}{\nofchars42}{\');
- writeln(fs,'*\company IDUS SOFTWARE}{\vern57439}}');
- write (fs,'\paperw11906\paperh16838\margl1701\margr1701\margt1');
- write (fs,'417\margb1417 \deftab708\widowctrl\ftnbj\aenddoc\hy');
- write (fs,'phhotz425\makebackup\hyphcaps0\formshade \fet0\sect');
- write (fs,'d \linex0\headery709\footery709\colsx709\endnhere {');
- writeln(fs,'\header \pard\plain \s15\qc\widctlpar\brdrb');
- write (fs,'\brdrs\brdrw15\brsp20 \tqc\tx4252\tqr\tx8504 \f4\fs');
- writeln(fs,'20\lang1034 ');escribe_string(nfe);
- write (fs,'\par }{\footer \pard\plain \s16\qr\widctlpar\brdrt\');
- write (fs,'brdrs\brdrw15\brsp20 \tqc\tx4252\tqr\tx8504 \f4\fs2');
- writeln(fs,'0\lang1034 List.exe');
- write (fs,' \''A9 1996 Alberto Garcia Alvarez \tab Pagina {\fi');
- write (fs,'eld{\*\fldinst PAGE }{\fldrslt {\lang1024 1}}}');
- write (fs,'\par }{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnh');
- write (fs,'ang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnind');
- write (fs,'ent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstar');
- write (fs,'t1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlc');
- write (fs,'ltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnse');
- writeln(fs,'clvl5');
- write (fs,'\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntx');
- write (fs,'ta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pn');
- write (fs,'hang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pns');
- write (fs,'tart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\');
- writeln(fs,'pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang');
- write (fs,'{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart');
- write (fs,'1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}');
- writeln(fs,'\pard\plain \widctlpar \f4\fs20\lang1034 ');
- end;
-
- { funciones varias para los cambios de letra }
-
- procedure Codigo;
- Begin
- write(fs,'{\cs18\fs24 ');
- End;
-
- Procedure FinCodigo;
- Begin
- write(fs,'}');
- End;
-
- procedure Comentario;
- Begin
- FinCodigo;
- Write(fs,'{\cs20\fs24 ');
- End;
-
- procedure fincomentario;
-
- Begin
- Write(fs,'}');
- Codigo;
- End;
-
- procedure Literal;
- Begin
- Fincodigo;
- write(fs,'{\cs19\fs24 ');
- End;
-
- procedure finLiteral;
-
- Begin
- write(fs,'}');
- codigo;
- End;
-
- procedure reservada;
- Begin
- FinCodigo;
- Write(fs,'{\cs21\caps\fs24\ul ');
- End;
-
- procedure finreservada;
- Begin
- Write(fs,'}');
- Codigo;
- End;
-
- { Esto es el cuerpo del programa }
-
- Begin
- Assignfile(fe,nfe);
- Reset(fe);
- Assignfile(fs,nfs);
- Rewrite(fs);
- Estado:=0;
- prologo(nfe);
- Codigo; { Por defecto es todo codigo }
- While Not Eof(fe) do
- Begin
- if estado<>4
- Then Read(fe,ch)
- Else estado:=0;
- case ch of
- 9 : write(fs,'\tab ');
- 10 : ;
- 13 : Begin writeln(fs,'\n');write(fs,'\par '); End;
- ord('A')..ord('Z'),
- ord('a')..ord('z'):
- Begin
- if(Estado<>0) Then whex(ch)
- else Begin
- pa:='';
- Repeat
- pa:=pa+char(ch);
- Read(fe,ch);
- until((eof(fe)) or
- not( char(ch) in ['0'..'9','a'..'z','A'..'Z','_']));
- ax:=lowercase(pa);
- aux:=pr.indexof(ax);
- if (pr.indexof(ax)>=0)
- Then Reservada;
- write(fs,pa);
- if (pr.indexof(ax)>=0)
- Then FinReservada;
- estado:=4;
- end;
- End;
- Ord('\'): Write(fs,'\\');
- Ord(''''): Begin
- case estado of
- 0 : Begin estado:=2;literal;whex(ch);end;
- 2 : Begin estado:=0;whex(ch);finliteral;end;
- else whex(ch);
- end;
- End;
- Ord('{'): Begin
- if Estado=0 Then
- Begin
- Comentario;
- estado:=1;
- End;
- whex(ch);
- End;
- Ord('}'): Begin
- whex(ch);
- if Estado=1 Then
- Begin
- fincomentario;
- Estado:=0;
- End;
- End;
- else whex(ch);
- end;
- Application.ProcessMessages;
- End;
- writeln(fs,#13+#10+'\par }}');
- closefile(fe);closefile(fs);
- End;
-
-
- procedure TFPrincipal.SpeedButton1Click(Sender: TObject);
- begin
- if OpenDialog1.Execute
- Then Edit1.Text:=Opendialog1.Filename;
- end;
-
- procedure TFPrincipal.SpeedButton2Click(Sender: TObject);
- begin
- if SaveDialog1.Execute
- Then Edit2.Text:=Savedialog1.Filename;
-
- end;
-
- procedure TFPrincipal.SpeedButton3Click(Sender: TObject);
- begin
- parser(edit1.text,edit2.text);
- end;
-
- end.
-
-
-